from random import randint
# 1、写函数,将传入的列表或元祖对象的奇数位索引对应的元素
"""
def a(obj):
    if isinstance(obj,(list,tuple)):
        return list(obj[1::2])
print(a([1,2,3,4,5,6]))
"""
# 2、写函数,判断用户传入的对象(string,list,tuple)长度是否大于5
"""
def a(obj):
    if isinstance(obj,(str,list,tuple)):
        return len(obj) > 5
    else:
        print("错误")
print(a([1,2,3,4,5,6]))
"""
# 3、写函数,计算传入的string中,数字,字母,空格以及其它内容的个数,并返回结果
"""
def a(b):
    if not isinstance(b,str):
        raise TypeError("cuowu")
    jishu = {
        'shuzi':0,
        'zimu':0,
        'kongge':0,
        'other':0
    }
    for char in b:
        if char.isdigit():
            jishu['shuzi'] += 1
        elif char.isalpha():
            jishu['zimu'] += 1
        elif char.isspace():
            jishu['kongge'] += 1
        else:
            jishu['other'] += 1
    return jishu
print(a("adw !!! AA h 13234"))
"""

# 4、写函数,接收两个数字参数,返回较大的那个数字
"""
def shuzi(a,b):
    if a > b:
        print(a)
    else:
        print(b)
print(shuzi(1,2))
"""
# 5、编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
"""
def cacluate(*shuzi):
    return shuzi
print(cacluate(1,23,6))
"""
# 6、编写一个函数, 接收字符串参数, 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
"""
def jishu(q):
    if not isinstance(q,str):
        print("错误")
    daxie = 0
    xiaoxie = 0

    for char in q:
        if char.isupper():
            first += 1
        elif char.islower():
            last += 1
    return (daxie,xiaoxie)
print(jishu("Hello"))
"""
# 7、编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一个整形数k, 返回一个新列表.
# 函数需求:
# 将列表下标k之前对应(不包含k)的元素逆序;
# # 将下标k及之后的元素逆序;
"""
def new_list(list_obj,k):
    if len(list_obj) == 30:
        k1 = list_obj[:k][::-1]
        k2 = list_obj[k:][::-1]
        return k1+k2
    else:
        return []
ran_list = [randint(1,100)for i in range(30)]
print(new_list(ran_list,6))
"""
# 8、编写函数，从键盘输入参数x和n，计算并显示形如x+xx +xxx + xxxx + xxxxx+xxx…xxx+ 的表达式前n项的值
"""
def shu():
    x = int(input("请输入x:"))
    a = x
    n = int(input("请输入n:"))
    sum = 0
    result = []
    while n > 0:
        result.append(x)
        sum += x
        x = x*10 + a
        n -= 1
    for i in range(len(result)):
        if result[i] != result[-1]:
            print(f"{result[i]}",end="+")
        else:
            print(f"{result[i]}={sum}")
print(shu())
"""
# 9、写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,地址
"""
def info(name,age,address,sex='男'):
    print(f"姓名是:{name},年龄:{age},地址:{address},性别:{sex}")
print(info("zhangsan",19,"shanyang"))
"""
# 10、写函数,接收n个数字,返回这些数字的和(动态传参)
"""
def num(*n):
    sum = 0
    for i in n:
        sum += i
    return sum
print(num(1,2,3,4,5,5,5))
"""
# 11、在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里
"""
def iter_obj(*args,**kwargs):
    print(args)
    print(kwargs)
print(iter_obj("111",[123],(1,23),908,99,age=19,name="张三"))
"""
# 12、写函数,把传过来的列表中的每一个元素都用"_"拼接,并返回
"""
def ele(obj):
    str1 = ""
    for i in obj:
        str1 += str(i) + "_"
    return str1[:len(str1)-1]
print(ele([1,2,3]))
"""
# 13、写函数,传入一个数字,返回这个数的阶乘。示例：1x2x3....
"""
def jie(num):
    j = 1
    for i in range(1,num+1):
        j*=i
    return j
print(jie(6))
"""
# 14、写函数,返回一个扑克牌列表,里面有52项,每一项都是一个tuple
"""
def pk_list():
    p_list = []
    h = ['梅花','方片','红桃','黑桃']
    for j in h:
        for i in [2,3,4,5,6,7,8,9,10,'J','Q','K','A']:
            p_list.append((j,i))
    return p_list
print(pk_list())
"""
# 15、编写函数，求1+2+3+…N的和
"""
def sum_n(n):
    sum = 0
    for i in range(1,n+1):
        sum+=i
    return f"1+2+3+...N的和为:%s"%sum
print(sum_n(10))
"""
# 16、编写一个函数，求多个数中的最大值
"""
def num(*n):
    a = n[0]
    for i in n:
        if i > a:
            a = i
    return a
print(f"最大值:{num(1,2,3,4,5)}")
"""
# 17、编写一个函数，提取指定字符串中所有的字母，然后拼接在一起产生一个新的字符串
"""
def new_str(str1):
    str2 = ""
    for i in str1:
        if (i >= 'a' and i <= 'z') or (i >= 'A' and i <= 'Z'):
            str2+=i
    return str2
print(new_str('dajihaquw ahidan12312312331'))
"""
# 18、写一个函数，求多个数的平均值
"""
def avg_num(*n):
    return sum(n)/len(n)
print(avg_num(55,55,66))
"""
# 19、写一个自己的len函数，统计指定序列中元素的个数
def ele_num(ele):
    i = 0
    for j in ele:
        i+=1
    return i

# 20、找出传入的列表或元组的奇数位对应的元素，并返回一个新的列表
# 21、水仙花数：个位、十位、百位的立方加在一起等于数的本身
# 22、 定义函数，有一个形参，传入的是列表，数组大小不超过 100个，
# 数组中的每个元素值不允许超过 100，但是可以等于100，
# 如果列表大小超过了100个截取到第100个为止，要求返回的列表格式：
# 删除所有重复元素，使得每个元素只出现一次
# 按照数字的大小，由高到低排序返回
# 23、定义函数 getLength，打印用户传入的容器类型和数据长
# 24、定义函数 generateNum( )
# 25、定义函数 moreThan(num)，判断输入的数字是否大于1500
# 26、定义函数，有两个形参，第一个形参到第二个形参的范围，所有平方数之和
# 27、写函数，检查传入字典的每一个value长度，如果大于2，
# 那么仅保留前两个长度的内容， 并将新内容返回给调用者
#  28、写函数，判断用户传入的对象（字符串、列表、元组）的元素是否为空
# 29、编写自定义函数，完成一个简单的减法运算函数
# 30、编写自定义函数，可以输出自己的名字即可。
# 31、编写自定义函数：剪刀石头布
# 游戏开始，初始状态下用户和电脑都有 100 分，赢一局+10 分，输一局-10 分。
# 当用户为 0 分时，游戏结束，提示游戏结束，比赛输了
# 当用户为 200 分时，游戏结束，提示游戏结束，赢得比赛、每轮比赛都输出当前的分数
# 1 代表剪刀 2 代表石头 3 代表布
# 32、编写一个函数，接受一个字符串作为参数，并返回该字符串的逆序字符串
# 33、编写一个函数，接受一个数字列表作为参数，并返回其中所有偶数的列表
# 34、编写一个函数，接受一个字符串列表作为参数，并返回其中最长的字符串。
# 35、编写一个函数，接受一个数字列表作为参数，并返回其中所有数字的平方的总和
# 36、编写一个函数，接受一个字符串作为参数，并返回其中所有单词的首字母的大写形式
# 37、编写一个函数，接受两个列表作为参数，并返回两个列表的交集
# 举例：
# list1 = [100,200,300,454]
# list2 = [454,789,125,46]
# 返回：[454]
#  38、定义一个学生注册函数enroll()，打印学生姓名，性别，年龄，城市